#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <unordered_map>
#include <vector>
#include <set>
#include <queue>

using namespace std;
using LL = long long;
using PII = pair<int, int>;
const int N = 5e4 + 10;

int l, n, m;
vector<int> q;


bool check(int len){
    int cur = 0;
    int cnt = 0;
    for(int i = cur + 1; i < q.size(); i ++){   // q[i]代表下一步要跳的位置
        int t = 0;
        if(i == q.size() - 1) return true;

        while(q[i] - q[cur] < len){
            t ++;
            i ++;
        }
   

        cur = i;
        cnt += t;
        // cout << "当前跳到了: " << i << " 距离起点位置: " << q[i] << " 去掉了: " << t << "个石头, 一共去掉了: " << cnt << "个石头"<< '\n';

        if(l - q[cur] < len){
            cnt += q.size() - cur - 1;

            if(cnt <= m) return true;
            else return false;
        }
        
        if(cnt > m) return false;
    }
    return true;
}

int main(){
#ifdef LOCALFLAG
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif


    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> l >> n >> m;
    q.push_back(0);
    for(int i = 1, x; i <= n; i ++){    
        cin >> x;
        q.push_back(x);
    }
    q.push_back(l);

    int left = 1, right = l;

    // cout << check(238356) << '\n';
    while(left < right){
        int mid = left + right + 1 >> 1;
        if(check(mid)){
            left = mid;
        }else{
            right = mid - 1;
        }
    }

    cout << left << '\n';

    return 0;
}